unit ContasReceberRel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RelatorioModelo, SqlExpr, Provider, DB, DBClient, DBLocal,
  DBLocalS, RpCon, RpConDS, RpDefine, RpRave, StdCtrls, Buttons, ExtCtrls,
  RpRender, RpRenderPDF, RpBase, RpSystem, OleServer, ExcelXP, ConfiguracoesGlobais;

type
  TFrmContasReceberRel = class(TFrmRelatorioModelo)
    Label1: TLabel;
    edtCliente: TEdit;
    btPesquisaCliente: TButton;
    stNomeCliente: TStaticText;
    edtPlano: TEdit;
    Label2: TLabel;
    btPesqisaPlano: TButton;
    stNomePlano: TStaticText;
    Label3: TLabel;
    edtCidade: TEdit;
    btPesquisaCidade: TButton;
    stNomeCidade: TStaticText;
    GroupBox1: TGroupBox;
    EditFinal: TEdit;
    Label5: TLabel;
    EditInicial: TEdit;
    rdg_periodo: TRadioGroup;
    sql_dataset_principalREC_TITULO: TStringField;
    sql_dataset_principalREP_PARCELA: TIntegerField;
    sql_dataset_principalREC_EMISSAO: TDateField;
    sql_dataset_principalREC_EMPRESA: TIntegerField;
    sql_dataset_principalREC_OBSERVACOES: TMemoField;
    sql_dataset_principalREC_USUARIO: TStringField;
    sql_dataset_principalREC_IDFTITULO: TIntegerField;
    sql_dataset_principalPES_NOME: TStringField;
    sql_dataset_principalPES_ENDERECO: TStringField;
    sql_dataset_principalPES_BAIRRO: TStringField;
    sql_dataset_principalCID_DESCRI: TStringField;
    sql_dataset_principalCID_ESTCOD: TStringField;
    sql_dataset_principalPLA_DESCRICAO: TStringField;
    sql_dataset_principalREP_VENCIMENTO: TDateField;
    sql_dataset_principalREP_VALOR: TFMTBCDField;
    sql_dataset_principalREP_VALOR_RECEBIDO: TFMTBCDField;
    sql_dataset_principalREP_NOSSO_NUMERO: TFMTBCDField;
    sql_dataset_principalREP_RECEBIMENTO: TDateField;
    sql_dataset_principalPES_COMPLEMENTO: TStringField;
    sql_dataset_principalVALORTOTAL: TFMTBCDField;
    procedure btPesquisaClienteClick(Sender: TObject);
    procedure btPesqisaPlanoClick(Sender: TObject);
    procedure btPesquisaCidadeClick(Sender: TObject);
    procedure edtClienteExit(Sender: TObject);
    procedure edtPlanoExit(Sender: TObject);
    procedure edtCidadeExit(Sender: TObject);
    procedure EditInicialExit(Sender: TObject);
    procedure EditFinalExit(Sender: TObject);
  private
    Estado : string;
  protected
    procedure CriarConsulta;override;
    procedure EncerrarConsulta;override;
  public
    { Public declarations }
  end;

var
  FrmContasReceberRel: TFrmContasReceberRel;

implementation

uses DmGeral, ConModelo;

{$R *.dfm}

procedure TFrmContasReceberRel.btPesquisaClienteClick(Sender: TObject);
begin
  inherited;
  if TfrmConModelo.ConModPessoas('F','C') then begin
    if ConsultaZeos then begin
      edtCliente.Text := DtmGeral.CDS_Consulta.FieldbyName('Codigo').AsString;
      DtMGeral.CDS_Consulta.Close;
    end
    else begin
      edtCliente.Text := DtmGeral.SQLC_Consulta.FieldbyName('Codigo').AsString;
      DtMGeral.SQLC_Consulta.Close;
    end;
    edtCliente.SetFocus;
  end;
end;

procedure TFrmContasReceberRel.btPesqisaPlanoClick(Sender: TObject);
begin
  inherited;
  if TfrmConModelo.ConModPlanos then begin
    if ConsultaZeos then begin
      edtPlano.Text := DtmGeral.CDS_Consulta.FieldbyName('Codigo').AsString;
      DtMGeral.CDS_Consulta.Close;
    end
    else begin
      edtPlano.Text := DtmGeral.SQLC_Consulta.FieldbyName('Codigo').AsString;
      DtMGeral.SQLC_Consulta.Close;
    end;
    edtPlano.SetFocus;
  end;
end;

procedure TFrmContasReceberRel.btPesquisaCidadeClick(Sender: TObject);
begin
  inherited;
  if TfrmConModelo.ConModCidades then begin
    if ConsultaZeos then begin
      edtCidade.Text  := DtmGeral.CDS_Consulta.FieldByName('Codigo').AsString;
      Estado          := DtmGeral.CDS_Consulta.FieldByName('Estado').AsString;
      DtMGeral.CDS_Consulta.Close;
    end
    else begin
      edtCidade.Text  := DtmGeral.SQLC_Consulta.FieldByName('Codigo').AsString;
      Estado          := DtmGeral.SQLC_Consulta.FieldByName('Estado').AsString;
      DtMGeral.SQLC_Consulta.Close;
    end;
    edtCidade.SetFocus;
  end;
end;

procedure TFrmContasReceberRel.edtClienteExit(Sender: TObject);
begin
  inherited;
  BuscarEdit(edtCliente,stNomeCliente,'SELECT PES_NOME FROM PESSOAS '+
    'WHERE PES_IDFCOD = ' +QuotedStr(edtCliente.Text) ,'PES_NOME');
end;

procedure TFrmContasReceberRel.edtPlanoExit(Sender: TObject);
begin
  inherited;
  BuscarEdit(edtPlano,stNomePlano,'SELECT PLA_DESCRICAO FROM PESSOAS_PLANOS '
  + ' WHERE PLA_CODIGO = ' + edtPlano.Text,'PLA_DESCRICAO');
end;

procedure TFrmContasReceberRel.edtCidadeExit(Sender: TObject);
begin
  inherited;
  BuscarEdit(edtCidade,stNomeCidade,'SELECT CID_DESCRI FROM CIDADES WHERE'+
   ' CID_CODIGO = ' + QuotedStr(edtCidade.Text) + ' AND CID_ESTCOD = ' +
   QuotedStr(Estado),'CID_DESCRI');
end;

procedure TFrmContasReceberRel.CriarConsulta;
var
  c1, c2 : string;
  Parametros: TConfiguracoesGlobais;
  JurosDiario: string;
  Tolerancia: integer;
  Condicao: string;
begin
  Parametros := TConfiguracoesGlobais.Create('GESTOR');
  JurosDiario := FormatFloat('##0.##',Parametros.ParametroFloat('Juros_Mensal','GESTOR')/30);
  JurosDiario := StringReplace(JurosDiario,',','.',[rfReplaceAll]);
  Tolerancia := Parametros.ParametroInteiro('Juros_Toleranci','GESTOR');
  Condicao :=   '(CASE WHEN RTP.REP_RECEBIMENTO IS NULL THEN '
                  +'CASE WHEN CAST(CURRENT_DATE-RTP.REP_VENCIMENTO AS INTEGER) > ' + IntToStr(Tolerancia)
                  +' THEN '
                  +'(RTP.REP_VALOR*' + JurosDiario + '/100)*CAST(CURRENT_DATE-RTP.REP_VENCIMENTO AS INTEGER) '
                  +'ELSE 0 END '
                +'ELSE '
                  +'CASE WHEN CAST(RTP.REP_RECEBIMENTO-RTP.REP_VENCIMENTO AS INTEGER) > ' + IntToStr(Tolerancia)
                  +' THEN '
                  +'(RTP.REP_VALOR*' + JurosDiario + '/100)*CAST(RTP.REP_RECEBIMENTO-RTP.REP_VENCIMENTO AS INTEGER) '
                  +'ELSE 0 END '
                +'END)';
  with sql_dataset_principal do begin
    CommandText := 'SELECT DISTINCT RT.REC_TITULO, '+
      ' RTP.REP_PARCELA, RT.REC_EMISSAO, RT.REC_EMPRESA,P.PES_COMPLEMENTO,'+
      ' (RTP.REP_VALOR + '+CONDICAO+' - COALESCE(RTP.REP_DESCONTOS,0.00)) VALORTOTAL,'+
      ' RT.REC_OBSERVACOES, RT.REC_USUARIO, RT.REC_IDFTITULO, P.PES_NOME,'+
      ' P.PES_ENDERECO, P.PES_BAIRRO,C.CID_DESCRI, C.CID_ESTCOD, PL.PLA_DESCRICAO ,'+
      ' RTP.REP_VENCIMENTO, RTP.REP_VALOR, RTP.REP_VALOR_RECEBIDO,'+
      ' RTP.REP_NOSSO_NUMERO, REP_RECEBIMENTO FROM RECEBER_TITULOS RT'+
      ' INNER JOIN PESSOAS P ON P.PES_IDFCOD = RT.REC_PESSOA'+
      ' INNER JOIN  CIDADES C ON'+
      ' C.CID_CODIGO = P.PES_CIDADE AND C.CID_ESTCOD = P.PES_ESTADO '+
      ' INNER JOIN PESSOAS_CONTRATOS PCN ON'+
      ' PCN.PCN_PESSOAIDF = P.PES_IDFCOD'+
      ' INNER JOIN'+
      ' PESSOAS_PLANOS PL ON'+
      ' PL.PLA_CODIGO = PCN.PCN_PLANOIDF INNER JOIN RECEBER_TITULOS_PARCELAS RTP'+
      ' ON RTP.REP_IDFTITULO = RT.REC_IDFTITULO AND RT.REC_TITULO = PCN.PCN_CONTRATOCOD  WHERE 2 = 2 ';
    if Trim(edtCliente.Text) <> '' then
      CommandText := CommandText + ' AND P.PES_CODIGO = ' + QuotedStr(edtCliente.Text);
    if Trim(edtPlano.Text) <> '' then
      CommandText := CommandText + ' AND PL.PLA_CODIGO = ' + edtPlano.Text;
    if Trim(edtCidade.Text) <> '' then
       CommandText := CommandText + ' AND C.CID_CODIGO = ' + QuotedStr(edtCidade.Text)
         + ' AND C.CID_ESTCOD = ' + QuotedStr(Estado);
    if (Trim(EditInicial.Text) <> '') and (Trim(EditFinal.Text) <> '') then
    if rdg_periodo.ItemIndex = 0 then
      CommandText := CommandText + ' AND (RTP.REP_VENCIMENTO BETWEEN ' +
        QuotedStr(Dtmgeral.TClasseGeral.FormatarData(StrToDate(EditInicial.Text),'mda')) + ' AND '+
        QuotedStr(Dtmgeral.TClasseGeral.FormatarData(StrToDate(EditFinal.Text),'mda')) + ') AND '+
        '(RTP.REP_VALOR_RECEBIDO IS NULL)'
    else if rdg_periodo.ItemIndex = 1 then
      CommandText := CommandText + ' AND (RTP.REP_RECEBIMENTO BETWEEN ' +
        QuotedStr(Dtmgeral.TClasseGeral.FormatarData(StrToDate(EditInicial.Text),'mda')) + ' AND '+
        QuotedStr(Dtmgeral.TClasseGeral.FormatarData(StrToDate(EditFinal.Text),'mda')) + ')';
    CommandText := CommandText + ' ORDER BY RT.REC_TITULO, RTP.REP_PARCELA';
    //ShowMessage(CommandText);
  end;

  with RvProjectModelo do begin
    SetParam('Empresa',Licenca_Razao);
    SetParam('TitRel','RELATORIO DE CONTAS A RECEBER');
    c1 := '';
    c2 := '';
    if Trim(edtCliente.Text) <> '' then
      c1 := c1 + 'Titulos do cliente: ' + stNomeCliente.Caption;
    if (Trim(EditInicial.Text) <> '') and (Trim(EditFinal.Text) <> '') then begin
      if rdg_periodo.ItemIndex = 0 then
        c1 := c1 + ' Titulos com vencimento entre '
      else
        c1 := c1 + ' Titulos com pagamento entre ';
      c1 := c1 + EditInicial.Text + ' e ' + EditFinal.Text;
    end;
    SetParam('Cabec1',c1);
    if Trim(edtPlano.Text) <> '' then
      c2 := c2 + 'Plano Selecionado: ' + stNomePlano.Caption;
    if Trim(edtCidade.Text) <> '' then
      c2 := c2 + '-- Clientes de Cidade : ' + stNomeCidade.Caption; 
    SetParam('Cabec2',c2);
    SetParam('Unit','ContasReceberRel.pas');
    ProjectFile := Pc_DirRave + 'RelContasPagar.rav';
  end;
end;

procedure TFrmContasReceberRel.EncerrarConsulta;
begin
  inherited;

end;

procedure TFrmContasReceberRel.EditInicialExit(Sender: TObject);
var
  DataInicial : String;
begin
  {Valida data informada}
  DataInicial := EditInicial.text;
  if not Dtmgeral.TClasseGeral.ValidarData( DataInicial ) then begin
     EditInicial.SetFocus;
     Exit;
  end
  else
     EditInicial.text := DataInicial;
end;

procedure TFrmContasReceberRel.EditFinalExit(Sender: TObject);
var
  DataFinal : String;
begin
  {Valida data informada}
  DataFinal := EditFinal.text;
  if not Dtmgeral.TClasseGeral.ValidarData( DataFinal ) then begin
     EditFinal.SetFocus;
     Exit;
  end
  else
     EditFinal.text := DataFinal;
end;

end.
